module.exports = /******/ (function (modules) {
  // webpackBootstrap
  /******/ // The module cache
  /******/ var installedModules = {}; // The require function
  /******/
  /******/ /******/ function __webpack_require__(moduleId) {
    /******/
    /******/ // Check if module is in cache
    /******/ if (installedModules[moduleId]) {
      /******/ return installedModules[moduleId].exports;
      /******/
    } // Create a new module (and put it into the cache)
    /******/ /******/ var module = (installedModules[moduleId] = {
      /******/ i: moduleId,
      /******/ l: false,
      /******/ exports: {},
      /******/
    }); // Execute the module function
    /******/
    /******/ /******/ modules[moduleId].call(
      module.exports,
      module,
      module.exports,
      __webpack_require__
    ); // Flag the module as loaded
    /******/
    /******/ /******/ module.l = true; // Return the exports of the module
    /******/
    /******/ /******/ return module.exports;
    /******/
  } // expose the modules object (__webpack_modules__)
  /******/
  /******/
  /******/ /******/ __webpack_require__.m = modules; // expose the module cache
  /******/
  /******/ /******/ __webpack_require__.c = installedModules; // define getter function for harmony exports
  /******/
  /******/ /******/ __webpack_require__.d = function (exports, name, getter) {
    /******/ if (!__webpack_require__.o(exports, name)) {
      /******/ Object.defineProperty(exports, name, {
        enumerable: true,
        get: getter,
      });
      /******/
    }
    /******/
  }; // define __esModule on exports
  /******/
  /******/ /******/ __webpack_require__.r = function (exports) {
    /******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
      /******/ Object.defineProperty(exports, Symbol.toStringTag, {
        value: "Module",
      });
      /******/
    }
    /******/ Object.defineProperty(exports, "__esModule", { value: true });
    /******/
  }; // create a fake namespace object // mode & 1: value is a module id, require it // mode & 2: merge all properties of value into the ns // mode & 4: return value when already ns object // mode & 8|1: behave like require
  /******/
  /******/ /******/ /******/ /******/ /******/ /******/ __webpack_require__.t = function (
    value,
    mode
  ) {
    /******/ if (mode & 1) value = __webpack_require__(value);
    /******/ if (mode & 8) return value;
    /******/ if (
      mode & 4 &&
      typeof value === "object" &&
      value &&
      value.__esModule
    )
      return value;
    /******/ var ns = Object.create(null);
    /******/ __webpack_require__.r(ns);
    /******/ Object.defineProperty(ns, "default", {
      enumerable: true,
      value: value,
    });
    /******/ if (mode & 2 && typeof value != "string")
      for (var key in value)
        __webpack_require__.d(
          ns,
          key,
          function (key) {
            return value[key];
          }.bind(null, key)
        );
    /******/ return ns;
    /******/
  }; // getDefaultExport function for compatibility with non-harmony modules
  /******/
  /******/ /******/ __webpack_require__.n = function (module) {
    /******/ var getter =
      module && module.__esModule
        ? /******/ function getDefault() {
            return module["default"];
          }
        : /******/ function getModuleExports() {
            return module;
          };
    /******/ __webpack_require__.d(getter, "a", getter);
    /******/ return getter;
    /******/
  }; // Object.prototype.hasOwnProperty.call
  /******/
  /******/ /******/ __webpack_require__.o = function (object, property) {
    return Object.prototype.hasOwnProperty.call(object, property);
  }; // __webpack_public_path__
  /******/
  /******/ /******/ __webpack_require__.p = ""; // Load entry module and return exports
  /******/
  /******/
  /******/ /******/ return __webpack_require__((__webpack_require__.s = 0));
  /******/
})(
  /************************************************************************/
  /******/ [
    /* 0 */
    /***/ function (module, exports, __webpack_require__) {
      "use strict";

      Component({
        options: {
          addGlobalClass: true,
          pureDataPattern: /^_/,
        },
        properties: {
          duration: {
            type: Number,
            value: 500,
          },
          easingFunction: {
            type: String,
            value: "default",
          },
          loop: {
            type: Boolean,
            value: true,
          },
          videoList: {
            type: Array,
            value: [],
            observer: function observer() {
              var newVal =
                arguments.length > 0 && arguments[0] !== undefined
                  ? arguments[0]
                  : [];

              this._videoListChanged(newVal);
            },
          },
        },
        data: {
          nextQueue: [],
          prevQueue: [],
          curQueue: [],
          circular: false,
          _last: 1,
          _change: -1,
          _invalidUp: 0,
          _invalidDown: 0,
          _videoContexts: [],
        },
        lifetimes: {
          attached: function attached() {
            this.data._videoContexts = [
              wx.createVideoContext("video_0", this),
              wx.createVideoContext("video_1", this),
              wx.createVideoContext("video_2", this),
            ];
          },
        },
        methods: {
          _videoListChanged: function _videoListChanged(newVal) {
            var _this = this;

            var data = this.data;
            newVal.forEach(function (item) {
              data.nextQueue.push(item);
            });
            if (data.curQueue.length === 0) {
              this.setData(
                {
                  curQueue: data.nextQueue.splice(0, 3),
                },
                function () {
                  _this.playCurrent(1);
                }
              );
            }
          },
          animationfinish: function animationfinish(e) {
            var _data = this.data,
              _last = _data._last,
              _change = _data._change,
              curQueue = _data.curQueue,
              prevQueue = _data.prevQueue,
              nextQueue = _data.nextQueue;

            var current = e.detail.current;
            var diff = current - _last;

            if (diff === 0) return;
            this.data._last = current;
            this.playCurrent(current);

            this.triggerEvent("change", { activeId: curQueue[current].id });
            var direction = diff === 1 || diff === -2 ? "up" : "down";
            if (direction === "up") {
              if (this.data._invalidDown === 0) {
                var change = (_change + 1) % 3;
                var add = nextQueue.shift();
                var remove = curQueue[change];
                if (add) {
                  prevQueue.push(remove);
                  curQueue[change] = add;
                  this.data._change = change;
                } else {
                  this.data._invalidUp += 1;
                }
              } else {
                this.data._invalidDown -= 1;
              }
            }
            if (direction === "down") {
              if (this.data._invalidUp === 0) {
                var _change2 = _change;
                var _remove = curQueue[_change2];
                var _add = prevQueue.pop();
                if (_add) {
                  curQueue[_change2] = _add;
                  nextQueue.unshift(_remove);
                  this.data._change = (_change2 - 1 + 3) % 3;
                } else {
                  this.data._invalidDown += 1;
                }
              } else {
                this.data._invalidUp -= 1;
              }
            }
            var circular = true;
            if (nextQueue.length === 0 && current !== 0) {
              circular = false;
            }
            if (prevQueue.length === 0 && current !== 2) {
              circular = false;
            }
            this.setData({
              curQueue: curQueue,
              circular: circular,
            });
          },
          playCurrent: function playCurrent(current) {
            this.data._videoContexts.forEach(function (ctx, index) {
              index !== current ? ctx.pause() : ctx.play();
            });
          },
          // custom operation
          externalPlayOrPauseCurrent: function (type, current) {
            this.data._videoContexts.forEach(function (ctx, index) {
              if (index == current && type == "play") {
                ctx.play();
              } else if (index == current && type == "pause") {
                ctx.pause();
              }
            });
          },
          onPlay: function onPlay(e) {
            this.trigger(e, "play");
          },
          onPause: function onPause(e) {
            this.trigger(e, "pause");
          },
          onEnded: function onEnded(e) {
            this.trigger(e, "ended");
          },
          onError: function onError(e) {
            this.trigger(e, "error");
          },
          onTimeUpdate: function onTimeUpdate(e) {
            this.trigger(e, "timeupdate");
          },
          onWaiting: function onWaiting(e) {
            this.trigger(e, "wait");
          },
          onProgress: function onProgress(e) {
            this.trigger(e, "progress");
          },
          onLoadedMetaData: function onLoadedMetaData(e) {
            this.trigger(e, "loadedmetadata");
          },
          trigger: function trigger(e, type) {
            var ext =
              arguments.length > 2 && arguments[2] !== undefined
                ? arguments[2]
                : {};

            var detail = e.detail;
            var activeId = e.target.dataset.id;

            this.triggerEvent(
              type,
              Object.assign(
                Object.assign(Object.assign({}, detail), {
                  activeId: activeId,
                }),
                ext
              )
            );
          },
        },
      });

      /***/
    },
    /******/
  ]
);
